package com.cn.wxwinnie.java.clone;

/**
 * @author 潇湘暮雨 E-mail:wxwinnie@hotmail.com
 * 
 * @version 创建时间：2014年3月6日 下午4:35:45
 * 
 */
public class MyCloneableClass implements Cloneable {
	private String field1;
	private Integer field2;

	public String getField1() {
		return field1;
	}

	public void setField1(String field1) {
		this.field1 = field1;
	}

	public Integer getField2() {
		return field2;
	}

	public void setField2(Integer field2) {
		this.field2 = field2;
	}

	@Override
	protected Object clone() throws CloneNotSupportedException {
		Object obj = null;
		obj = (MyCloneableClass) super.clone();
		return obj;
	}

	/**
	 * 为了方便测试，这里将toString重写一下，然后，HashCode还是保留作为判断是否是同一个对象的标准。
	 * 这里之所以可以用HashCode来判断是否是同一个对象的原因如下：
	 * 首先这个类直接继承自Object，这个类里面没有重写HashCode的方法，也就是这里调用的hashCode()实际上是Object类中的；
	 * 而Object类中的HashCode是一个native方法 ，其实际实现上是将对象在内存中的地址转化为一个整数。
	 * 在不特殊的情况下，一个地址也就表示一个对象吧。 JDK原文：This is typically
	 * implemented by converting the internal address of the object into an
	 * integer。
	 */
	@Override
	public String toString() {
		return "MyCloneableClass:{field1=" + field1 + ", field2=" + field2
				+ "}" + "@" + Integer.toHexString(hashCode());
	}

}
